// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
// import com.alibaba.druid.sql.dialect.oracle.ast.clause.PartitionExtensionClause;
// import com.alibaba.druid.sql.dialect.oracle.ast.clause.SampleClause;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../../ast/statement/SQLExprTableSource.h"
#include "OracleSelectTableSource.h"

class OracleSelectTableReference : virtual public SQLExprTableSource, virtual public OracleSelectTableSource
{
public:
  BOOL_ptr only;

  PartitionExtensionClause_ptr partition;
  SampleClause_ptr sampleClause;

  OracleSelectTableReference();

  OracleSelectTableReference(SQLExpr_ptr expr);

  SHAREDOBJECT(OracleSelectTableReference);
  PartitionExtensionClause_ptr getPartition();

  void setPartition(PartitionExtensionClause_ptr partition);

  BOOL_ptr isOnly();

  void setOnly(BOOL_ptr only);

  SampleClause_ptr getSampleClause();

  void setSampleClause(SampleClause_ptr sampleClause);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(OracleASTVisitor_ptr visitor);

  // @Override
  bool equals(Object_ptr o);

  // @Override
  int hashCode();

  string_ptr toString();

  SQLObject_ptr clone();
};
